﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Gustozzi.DAL;
namespace Gustozzi.BL
{
    public class ClienteBL
    {
        public int ActualizarCliente(Cliente oCliente, List <ClienteDireccion> lstDirecciones,VentasDataEntities contexto)
        {
            if (oCliente == null)
            {
                throw new Exception("Objeto Cliente nulo");
            }
            if (oCliente.estado.Trim().Equals(string.Empty))
            {
                throw new Exception("Ingrese estado");
            }
            if (oCliente.nombreCliente.Trim().Equals(string.Empty))
            {
                throw new Exception("Ingrese nombre o razon social");
            }
            if (oCliente.codigoTipoCliente <= 0)
            {
                throw new Exception("Ingrese codigo de tipo de cliente");
            }
            if (lstDirecciones == null)
            {
                throw new Exception("Ingrese al menos una dirección");
            }
            if (lstDirecciones.Count == 0)
            {
                throw new Exception("Ingrese al menos una dirección");
            }

            if (contexto == null) { contexto = new VentasDataEntities();  } 

            var oClienteQuery = (from c in contexto.Clientes
                                 where c.codigoCliente == oCliente.codigoCliente
                                 select c);

            int codigo = oCliente.codigoCliente;

           
            if (oClienteQuery.Count()==0)
            {
                codigo += 1;

                oCliente.codigoCliente = codigo;
            }


           // contexto.AddToClientes(oCliente);

            int codigoDireccion = (from p in contexto.ClienteDirecciones
                                   select p.codigoDireccion).Max();
            codigoDireccion += 1;

            foreach (var item in lstDirecciones)
            {
                item.codigoCliente = codigo;

                var lstClienteDireccion = (from p in contexto.ClienteDirecciones
                                           where p.codigoDireccion == item.codigoDireccion
                                           select p);

                ClienteDireccion oClienteDireccion = null;
                if (lstClienteDireccion.Count() != 0)
                {
                    oClienteDireccion = lstClienteDireccion.First(); 
                }               
                else
                {
                    oClienteDireccion = new ClienteDireccion();
                    oClienteDireccion.codigoCliente = codigo;
                    oClienteDireccion.codigoDireccion = codigoDireccion;
                    codigoDireccion += 1;
                }                

                oClienteDireccion.codigoDistrito = item.codigoDistrito;
                oClienteDireccion.codigoProvincia = item.codigoProvincia;
                oClienteDireccion.codigoDpto = item.codigoDpto;
                oClienteDireccion.codigoTipoDireccion = item.codigoTipoDireccion;
                oClienteDireccion.descripcionCompleta = item.descripcionCompleta;
                oClienteDireccion.referenciaAdic = item.referenciaAdic;
                oClienteDireccion.estado = item.estado;
              
                oCliente.ClienteDireccion.Add(oClienteDireccion);
                
            }
            
           return contexto.SaveChanges();
        }
    }
}
